websocket接口自动化集成pytest测试框架

您所在的位置:网站首页 pytest params websocket接口自动化集成pytest测试框架

websocket接口自动化集成pytest测试框架

#websocket接口自动化集成pytest测试框架| 来源: 网络整理| 查看: 265

每天进步一点点,关注我们哦,每天分享测试技术文章

本文章出自【码同学软件测试】

码同学公众号:自动化软件测试

码同学抖音号:小码哥聊软件测试

01

websocket协议

1、介绍

WebSocket是一种在单个TCP通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

2、原理

3、与http协议的比较

相同之处:

都是基于TCP的应用层协议;都使用Request/Response模型进行连接的建立;在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码;都可以在网络中传输数据。

不同之处:

WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用;WS的连接不能通过中间人来转发,它必须是一个直接连接;WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据;WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息;WS的数据帧有序。

4、websocket应用场景

websocket的使用场景:

社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等 需要高实时的场景

02

websocket接口测试实战

以码同学全栈接口项目中的websocket接口为例,项目地址 http://**.***.**.**:****/pinter/

接口名称接口类型URL参数匹配接口websocket/pinter/imserver/用户id{"type":"match","from":"发送者","to":"system"}发送聊天消息接口websocket/pinter/imserver/用户id{"msgId":"消息id","type":"normal","from":"发送者","to":"老师id","msg":"消息内容"}

01

抓包查看,熟悉接口业务

1、访问项目首页,打开浏览器的开发者工具,选择Network-->WS

2、点击页面上websocket案例的开始练习,抓包看到以下数据

绿色箭头表示浏览器向服务器发送的数据,红色箭头表示服务器返回的数据

本次请求是的业务是打开聊天窗口后,匹配一个后台的客服老师

请求参数:

type为match表示这是个匹配类型的动作from表示客户idto表示该请求发送给谁system为服务器系统{"type":"match","from":"发送者","to":"system"}

服务器返回数据:

code是业务状态码,0表示成功from表示该数据是谁发来的,system表示是系统发来的msg表示系统为客户匹配到的老师idmsgId表示的是消息idtimestamp当前时间戳to表示该数据是发给谁的,发给客户admin的type表示请求类型,match表示这个匹配请求{ "code":"0", "from":"system", "msg":"cf2137234f3943e3898df8fcd14f099a__mtx", "msgId":"4c7ff9b3-ce6b-4891-8c14-41e0f45e0bd0", "timestamp":"1665630374482", "to":"admin", "type":"match"}

免费领取 码同学软件测试 课程笔记+超多学习资料+完整视频+最新面试题,可以转发文章 + 私信「码同学666」获取资料哦

3、聊天窗口发送聊天信息,抓包查看

第1步:对应数字图中的数字1,发送数据到服务器,服务器会根据信息进行推送,将数据发给指定的客服老师

type表示请求类型,normal是正常聊天消息的意思from表示这个数据是从谁发来的,从客户admin发出来的to表示这个是发给谁的,发给cf2137234f3943e3898df8fcd14f099a__mtx这个客服老师的msg是发给客服老师具体的信息{ "type":"normal", "from":"admin", "to":"cf2137234f3943e3898df8fcd14f099a__mtx", "msg":"你好"}

第2步:对应图中的数字2,服务器将消息推送给客服老师成功后,把成功的信息发送给客户,其中核心字段msg为push success表示推送成功,type为receipt表示服务器返回的

{"code":"0","from":"system","msg":"push success","msgId":"130f4370-6b2b-4634-b3f1-59a9728eb8f1","timestamp":"1665631227681","to":"admin","type":"receipt"}

第3步:对应图中的数字3,客服老师在收到服务器推送给自己的客户消息后,返回给客户的信息,也是由服务器转发过来的,而并不是直接返回给客户的

type表示请求类型,normal是正常聊天消息的意思from表示这个数据是从谁发来的,从客服老师cf2137234f3943e3898df8fcd14f099a__mtx发出来的to表示这个是发给谁的,发给admin这个客户的msg是发给客服具体的信息{"code":"0","from":"cf2137234f3943e3898df8fcd14f099a__mtx","msg":"同学,你好,非常高兴为你服务,有什么需要我帮忙的呢?","msgId":"8486956c-e804-42b9-bb9b-d1574f1ca23f","timestamp":"1665631228807","to":"admin","type":"normal"}

02

python调用websocket接口

安装第三方库

接口调用

接口框架中适配websocket封装

1、封装底层websocket类

在config目录下创建一个websocket.yml的文件,写上如下内容:

在client.py中增加如下代码

2、封装websocket api层

在api包下创建websoket_api包,其下创建imserver_api.py ,写上如下代码

3、编写测试用例层

在testcases目录下创建websocketapi包,在其下创建test_websocket_api.py

# !/usr/bin python3 # encoding: utf-8 -*- # @file : test_websocket_api.py # @author : 沙陌 Matongxue_2# @Time : 2022-10-19 16:07# @Copyright: 北京码同学 import jsonimport pytest from api.websoket_api.imserver_api import ImServerApiclass TestImServerApi: kfid = '' # 定义客服id,全局变量作为各个测试用例的关联数据 def setup_class(self): self.im = ImServerApi() # 创建一个websocket协议的接口对象 # 测试客服匹配 def test_match(self): params = { "msgId": "111", "type": "match", "from": "shamo", "to": "system" } self.im.send(json.dumps(params)) res = self.im.recv() res = json.loads(res)# 将其转换成json对象 assert res['code'] == '0' # 提取msg,msg是匹配到的客服id self.__class__.kfid = res['msg'] # 测试给客服发送正常消息 def test_message(self): params={ "msgId": "111", "type": "normal", "from": "admin", "to": f"{self.__class__.kfid}", "msg": "你好" } self.im.send(json.dumps(params)) res = self.im.recv() res = json.loads(res)# 将其转换成json对象 # 断言系统推送消息的结果是否正确 pytest.assume(res['code'] == '0',f'期望值是0,实际结果是{res["code"]}') pytest.assume(res['msg'] == 'push success', f'期望值是0,实际结果是{res["msg"]}') # 再次接收客服发来的数据 res = self.im.recv() res = json.loads(res)# 将其转换成json对象 pytest.assume(res['code'] == '0',f'期望值是0,实际结果是{res["code"]}') pytest.assume(res['msg'] == '同学,你好,非常高兴为你服务,有什么需要我帮忙的呢?', f'期望值是0,实际结果是{res["msg"]}') # 测试发送数据时消息是空的 def test_message_msgisnull(self): params={ "msgId": "111", "type": "normal", "from": "admin", "to": f"{self.kfid}", "msg": "" } self.im.send(json.dumps(params)) res = self.im.recv() res = json.loads(res)# 将其转换成json对象 # 断言系统推送消息时对于消息的判断 pytest.assume(res['code'] == '1',f'期望值是1,实际结果是{res["code"]}') pytest.assume(res['msg'] == '消息内容为空', f'期望值是0,实际结果是{res["msg"]}')

免费领取码同学软件测试课程笔记+超多学习资料+学习完整视频,可以关注我们公众号哦:自动化软件测试

本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3